事件其实就是阻塞所有进程,让所有的进程进入等待的状态
from multiprocessing import Event
e = Event()
e.wait(5) # 得到一个标识,表示的默认状态就是阻塞,如果传了一个数字进去就代表只阻塞5秒,如果不传一直阻塞着
e.set() # 将标识变成非阻塞状态
e.clear() # 将标识变成阻塞状态
e.is_set() # 判断是否为非阻塞 返回值: True: 非阻塞 False: 阻塞
1. 红绿灯例子
- 每隔3秒进行红绿灯的切换
- 每次绿灯都会通过一定随机数量的车辆
import random
import time
from multiprocessing import Process
from multiprocessing import Event
# 红绿灯切换进程
def traffic_light(e):
while True:
if e.is_set(): # 判断是否为非阻塞
time.sleep(3)
print('红灯亮')
e.clear() # 将标识设置为阻塞
else:
time.sleep(3)
print('绿灯亮')
e.set() # 将标识设置为非阻塞
# 汽车通过进程
def car(i, e):
e.wait() # 设置标识状态,根据状态对所有进程进行阻塞
print('%s车通过' % i)
if __name__ == '__main__':
e = Event() # 立了一个红绿灯
tra = Process(target=traffic_light, args=(e,))
tra.start() # 执行红绿灯切换进程
for i in range(100):
if i % 6 == 0:
time.sleep(random.randint(1, 3)) # 设置延时,每次通过随机数量的车辆
car_pro = Process(target=car, args=(i, e))
car_pro.start() # 汽车通过进程